#!/usr/bin/env node


//  npm i kolorist   npm i @clack/prompts npm i axios


const { black, green, red, bgCyan, bgMagenta, link, bgBlue, bold, blue } = require('kolorist');

const { to } = require('await-to-js');



const { intro, outro, spinner, multiselect, confirm, isCancel, text, cancel, select } = require('@clack/prompts');
const utils = require('../utils/index');




const main = async function () {

  intro(bgCyan(black(` yy - ai - commit`)));

  // 获取当前目录
  let [err1] = await to(utils.getParse())
  if (err1) {
    return outro(`${red(bold('错误: '))}当前目录必须是一个 Git 存储库！请确保您在正确的目录中运行此脚本，或者初始化一个新的 Git 存储库。`);
  }

  // 取消所有暂存文件
  await utils.getReset()
  // 提交文件
  let [err4, nameData] = await to(utils.getNameonlys());



  //
  if (err4) {
    return outro(`${red(bold('错误: '))}没有检测到文件差异。您的工作目录很干净，无需提交任何更改。`);
  }

  let zcData = nameData.map(item => {
    return { value: item, label: item };
  })

  const answer = await multiselect({
    message: '选择需要进行提交的文件',
    options: zcData,
    required: true,
  });

  if (isCancel(answer)) {
    outro(`${red(bold('警告: '))}提交已取消`);
    return process.exit(0);
  }

  await utils.gitAdd(answer.join(' '))
  // 获取文件差异
  const [err2, diffData] = await to(utils.getDiff())

  const ss = spinner();
  ss.start(`人工智能正在分析你的变化...`);

  // 获取人工智能分析
  const [err, aiData] = await to(utils.getAi(diffData));
  if (isCancel()) {
    outro(`${red(bold('警告: '))}提交已取消`);
    return process.exit(0);
  }

  if (err) {
    ss.stop('智能分析')
    outro(`${red(bold('警告: '))},${err}`);
    return
  }


  ss.stop(`${green(bold('成功: '))}人工智能分析已完成分析`);

  // 生成提交信息
  const confirmed = await confirm({
    message: `使用此提交消息 ?\n\n   ${aiData} \n`,
  }); // 确认是否使用生成的提交信息

  if (!confirmed || isCancel(confirmed)) {
    outro(`${red(bold('警告: '))}提交已取消`);
    process.exit()
  }
  const sss = spinner();

  sss.start('正在提交');

  // 提交信息
  await utils.gitCommit(aiData);

  // 获取最新
  await utils.getPull()
  // 推送
  await utils.gitPush()
  sss.stop('提交已完成');
  // 获取远程地址
  const origin = await utils.getOrigin()

  outro(bgCyan(`✔️ 已成功提交 `));

  console.log(red(bold(link(`查看提交信息-->${origin}`, origin))));
  process.exit()
}


module.exports = main;
